手把手教如何安装OpenStack

您所在的位置:网站首页 openstack endpoint 手把手教如何安装OpenStack

手把手教如何安装OpenStack

2024-07-01 15:07| 来源: 网络整理| 查看: 265

目录

A.1 综合环境准备

A.1.1 确定云部署目标

A.1.2 设计云部署架构

A.2 配置 OpenStack 云平台环境

A.2.1 准备两个节点主机

环境初始化:

A.2.2 配置节点主机网络

网络配置步骤:

1.停用 NetworkManager 并启用 network 服务:

2.配置网卡

3.测试连通性:

A.2.3 设置时间同步

A.2.4 安装 OpenStack 软件包

 A.2.5 安装SQL数据库

A.2.6 安装消息队列服务

A.2.7 安装 Memcached 服务

A.2.8 安装Etcd服务

A.3 安装和部署 Keystone身份管理服务

A.3.1 创建 Keystone 数据库

A.3.2 安装和配置 Keystone 及相关组件

A.3.3 配置Apache HTTP服务器

A.3.4 完成 Keystone 安装

A.3.6   验证 Keystone 服务的安装

A.3.7 创建 OpenStack 客户端环境脚本

A.4.1 安装和部署Glance镜像服务

A.4.2 安装和配置Glance组件

A.4.3 完成Glance服务安装

A.4.4 验证Glance镜像操作

A.5.1 完成Placement服务安装的前期准备

A.5.2 安装和配置Placement服务组件

A.5.3 完成放置服务安装并进行验证

A.6 安装和部署 Nova

A.6.1 在控制节点上完成Nova的安装准备

A.6.2 在控制节点上安装和配置Nova组件

A.6.3   在控制节点上完成 Nova 安装

A.6.4 在计算节点上安装和配置Nova组件

A.6.5 在计算节点上完成Nova安装

A.6.6 将计算节点添加到cell数据库

A.6.7 验证Nova计算服务的安装

A.7 安装部署 Neutron

A.7.1 控制节点上的网络服务安装准备

A.7.3 在控制节点上配置元数据代理

A.7.5   在控制节点上完成网络服务安装

A.7.6   在计算节点上安装 Neutron 组件

A.7.7   在计算节点上配置网络通用组件

A.7.8   在计算节点上配置网络选项

这里 local_ip 选项设置为计算节点管理网络接口 IP 地址。在[vxlan]节中启用 VXLAN 覆盖网络和 L2 population。在[securitygroup]节中配置安全组混合 iptables 防火墙驱动。A.7.9   在计算节点上配置计算服务使用网络服务编辑/etc/nova/nova.conf file 文件,在[neutron]节中设置访问选项。

A.7.10   在计算节点上完成网络服务安装

A.7.11   验证网络服务运行

A.7.12 创建初始网络

A.8   安装和部署 Horizon

A.8.1   安装和配置 Horizon 组件

A.8.2   完成 Horizon 安装并进行验证

A.9   安装和部署 Cinder

A.9.1   在控制节点上完成 Cinder 的安装准备

A.9.2   在控制节点上安装和配置 Cinder 组件

A.9.3   在控制节点上配置计算服务使用块存储服务

A.9.4   在控制节点上完成 Cinder 安装

A.9.5   在存储节点上完成 Cinder 的安装准备

A.9.6   在存储节点上安装和配置 Cinder 组件

A.9.7   在存储节点上完成 Cinder 安装

A.9.8   验证 Cinder 服务操作

A.1 综合环境准备 A.1.1 确定云部署目标

本次综合实训旨在通过手动安装方式,在 CentOS 7 操作系统上搭建一个由两个节点组成的实验性质的 OpenStack 云平台,采用的是 OpenStack Train 版本。在这个双节点平台上,我们将部署以下7个核心服务:

Keystone (身份认证服务)Glance (镜像服务)Placement (资源放置服务;从Stein版本开始独立)Nova (计算服务)Neutron (网络服务)Horizon (Web控制面板)Cinder (块存储服务)

按照服务间的依赖关系,安装时应遵循以上列出的顺序。

A.1.2 设计云部署架构

依据实训目标,将在两个节点上分配角色,其中一个节点作为控制节点,运行除计算服务外的所有核心服务;另一个节点作为计算节点,运行Nova服务,并结合Open vSwitch代理实现L2自服务网络方案,如图A-1所示。

A.2 配置 OpenStack 云平台环境 A.2.1 准备两个节点主机

本次实训中,我们需要准备两台分别作为控制节点和计算节点的 CentOS 7 主机。为了简化实验,可以通过VMware Workstation创建两台虚拟机,推荐安装带有图形界面的CentOS 7操作系统。控制节点配置为:4GB内存,双核CPU,60GB硬盘,网卡采用桥接模式连接宿主机网络以接入Internet。计算节点配置为:8GB内存,双核CPU,两个硬盘分别具有200GB和100GB容量,同样以桥接模式接入宿主机网络。

环境初始化: 关闭防火墙: 1,sudo systemctl disable firewalld 2,sudo systemctl stop firewalld 设置时区为中国上海: 1,timedatectl set-timezone "Asia/Shanghai" A.2.2 配置节点主机网络

针对每个节点主机,配置两个网卡。第一个网卡设为仅主机模式(管理网络),第二个网卡设为桥接模式(接入Internet)。参考网络拓扑如图A-2所示。

网络配置步骤: 1.停用 NetworkManager 并启用 network 服务: systemctl disable NetworkManager systemctl stop NetworkManager systemctl enable network systemctl start network 2.配置网卡

控制节点:假设第一个网卡名为 ens33,配置管理网络

echo "IPADDR=10.0.0.11" >> /etc/sysconfig/network-scripts/ifcfg-ens33 echo "PREFIX=24" >> /etc/sysconfig/network-scripts/ifcfg-ens33 # 不设置 GATEWAY 和 DNS

 第二个网卡 ens37,配置接入Internet:

echo "IPADDR=192.168.199.51" >> /etc/sysconfig/network-scripts/ifcfg-ens37 echo "PREFIX=24" >> /etc/sysconfig/network-scripts/ifcfg-ens37 echo "GATEWAY=192.168.199.1" >> /etc/sysconfig/network-scripts/ifcfg-ens37 echo "DNS1=114.114.114.114" >> /etc/sysconfig/network-scripts/ifcfg-ens37

配置完成后,重启网络服务以使更改生效:

systemctl restart network

计算节点:按照相似的方式配置网卡,只是管理网络的IP地址为10.0.0.21,接入Internet的IP地址为192.168.199.52。这里就教给同学们自己动手。

更改并同步主机名:

将控制节点主机名更改为 controller:

hostnamectl set-hostname controller

将计算节点主机名更改为 compute1。

接着,在两个节点的 /etc/hosts 文件中添加对方的主机名和IP地址记录:

# /etc/hosts 示例 10.0.0.11   controller 10.0.0.21   compute1 3.测试连通性:

从控制节点测试到计算节点的连通性:

[root@controller ~]# ping -c 2 compute1

从控制节点测试到Internet的连通性:

[root@controller ~]# ping -c 2 www.163.com

从计算节点分别测试到控制节点和Internet的连通性。

A.2.3 设置时间同步

在OpenStack环境中,确保所有节点的时间同步至关重要,以免因时间差异导致各种问题。在CentOS 7操作系统中,推荐使用Chrony作为时间同步服务,若尚未安装,可以通过以下命令进行安装:

yum install chrony

假设系统中已经预装了Chrony,接下来需要配置Chrony以同步到特定的NTP服务器。在此案例中,我们将使用IP地址为192.168.199.201的物理主机作为NTP服务器。为此,打开Chrony的配置文件:

vi /etc/chrony.conf

在文件中加入以下配置行,指示Chrony使用该NTP服务器进行时间同步,并使用iburst模式提高初次同步的速度和准确性:

server 192.168.199.201 iburst

保存并退出编辑器后,重启Chrony服务以应用新的配置:

systemctl restart chronyd.service

这样,控制节点和计算节点都将通过Chrony服务与指定的NTP服务器进行时间同步,确保整个OpenStack环境中的时间一致性。此外,还需确认其他节点也按照类似方式进行配置和同步。

A.2.4 安装 OpenStack 软件包

     在双节点环境中,无论是控制节点还是计算节点,都需要按照以下步骤安装必要的OpenStack软件包:

启用OpenStack软件库 为了安装OpenStack Train版本,首先需要在每个节点上启用对应的软件源:

yum install -y centos-release-openstack-train

升级系统软件包 确保系统软件包是最新的,执行全局升级:

yum -y upgrade

安装OpenStack客户端 安装Python OpenStack客户端,以便在命令行中管理和操作OpenStack服务:

yum -y install python-openstackclient

安装SELinux策略 由于CentOS系统默认启用了SELinux,为了更好地配合OpenStack服务的安全策略,需要安装openstack-selinux软件包:

yum -y install openstack-selinux

验证安装 完成上述安装步骤后,可以在控制节点上运行以下命令来验证openstack-clients包是否成功安装,并查看其版本号:

[root@controller ~]# openstack --version

如果输出类似于openstack 4.0.1这样的版本信息,则说明OpenStack客户端已成功安装。 请注意,此处仅安装了OpenStack客户端及相关SELinux策略,接下来还需要在控制节点上安装和配置诸如数据库、消息队列、身份认证服务等核心服务,而在计算节点上则主要安装和配置计算服务等相关组件。这些服务的安装和配置通常涉及更多具体的步骤和交互式配置过程。 

 A.2.5 安装SQL数据库

        在OpenStack环境中,大部分服务依赖于SQL数据库来存储数据。本教程中,将在控制节点上安装MariaDB数据库,并对其进行初始化配置。

        安装MariaDB数据库及其Python适配器 在控制节点上执行以下命令安装MariaDB数据库及其Python适配器: 

[root@controller ~]# yum -y install mariadb mariadb-server python2-PyMySQL

        配置数据库 编辑 /etc/my.cnf.d/openstack.cnf 配置文件,在 [mysqld] 部分添加以下配置项,确保数据库可以被其他节点通过管理网络访问:

[mysqld] bind-address = 10.0.0.11 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8

其中,bind-address 设置为控制节点的管理IP地址(本例中为10.0.0.11)

启动MariaDB服务并设置开机启动 运行以下命令将MariaDB设置为开机自动启动,并启动数据库服务:

systemctl enable mariadb.service systemctl start mariadb.service

 加强数据库安全性 运行 mysql_secure_installation 脚本来增强数据库的安全性:

[root@controller ~]# mysql_secure_installation # 按提示操作 Enter current password for root (enter for none): # 默认root密码为空,初次运行直接回车 Set root password? [Y/n] y # 是否设置root用户密码,输入y并回车设置 New password: # 输入要设置的root用户密码 Re-enter new password: # 再次输入相同的密码以确认 ... Remove anonymous users? [Y/n] y # 是否移除匿名用户,直接回车以移除 ... Disallow root login remotely? [Y/n] y # 是否禁止root远程登录,直接回车以禁止 ... Remove test database and access to it? [Y/n] y # 是否移除test数据库,直接回车以移除 ... Reload privilege tables now? [Y/n] y # 是否立即重新加载权限表,直接回车以应用更改

完成上述步骤后,MariaDB数据库已经被正确安装并进行了安全加固,为OpenStack服务提供稳定可靠的数据库支持。

A.2.6 安装消息队列服务

在OpenStack环境中,消息队列服务是必不可少的一部分,它通常部署在控制节点上。本节中,我们将采用广泛支持的RabbitMQ作为消息队列服务,并在控制节点上执行以下操作:

 安装RabbitMQ服务 在控制节点上运行以下命令安装RabbitMQ服务器软件包:

yum -y install rabbitmq-server

设置RabbitMQ服务为开机自动启动并启动服务 执行以下命令确保RabbitMQ服务能够在系统启动时自动启动,并启动该服务:

systemctl enable rabbitmq-server.service systemctl start rabbitmq-server.service

创建并配置RabbitMQ用户 为OpenStack服务创建一个专用用户,并设置密码。这里将用户名设为openstack,密码设置为RABBIT_PASS(请在实际操作中替换为强密码):

[root@controller ~]# rabbitmqctl add_user openstack RABBIT_PASS Creating user "openstack"

赋予openstack用户访问权限 接下来,给openstack用户授予在默认虚拟主机("/")下的全部读写权限:

[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*" Setting permissions for user "openstack" in vhost "/"

通过以上步骤,已经在控制节点上成功安装并配置了RabbitMQ消息队列服务,为OpenStack服务提供了消息传递能力。接下来可以继续安装和配置OpenStack的其他核心服务。

A.2.7 安装 Memcached 服务

在OpenStack环境中,Memcached服务常用于缓存令牌以提高身份验证性能,通常部署在控制节点上。以下是安装和配置Memcached服务的步骤: 安装Memcached及Python适配器 在控制节点上运行以下命令安装Memcached服务及其Python适配器:

yum -y install memcached python-memcached

编辑配置文件vim  /etc/sysconfig/memcached 配置文件,修改 OPTIONS 行以指定Memcached监听的IP地址,使其不仅监听本地回环地址,还监听控制节点的管理IP地址。例如,如果控制节点的管理IP地址是 10.0.0.11,那么应该修改为:

OPTIONS="-l 127.0.0.1,::1,10.0.0.11"

注意:在真实场景中,你需要将 10.0.0.11 替换成实际的控制节点管理IP地址。 注意,上述示例中 -l 参数后面跟着的是允许Memcached监听的IP地址列表,用逗号隔开。这样其他节点就可以通过管理网络访问Memcached服务。 设置Memcached服务开机自动启动并启动服务 执行以下命令将Memcached服务设置为开机自动启动,并立即启动该服务:

systemctl enable memcached.service systemctl start memcached.service

经过以上步骤,Memcached服务已在控制节点上成功安装并配置完毕,能够为OpenStack服务提供缓存支持。接下来,可以继续进行其他服务的安装与配置。

A.2.8 安装Etcd服务

虽然Etcd在某些OpenStack部署中可能作为服务发现、共享配置和分布式锁服务的角色存在,但在标准OpenStack安装流程中并不总是必需的组件。然而,如果您决定使用Etcd来增强OpenStack环境的可靠性与分布式协调能力,可以按照以下步骤在控制节点上安装和配置Etcd服务:

 安装Etcd软件包 在控制节点上运行以下命令安装Etcd服务:

yum -y install etcd

配置Etcd服务 编辑 /etc/etcd/etcd.conf 配置文件,确保Etcd服务监听正确的IP地址,并设定集群参数。示例如下:

[member] ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380" ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379" ETCD_NAME="controller" [cluster] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380" ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379" ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" ETCD_INITIAL_CLUSTER_STATE="new"

在这里,将 10.0.0.11 替换为控制节点的实际管理IP地址,确保其他节点可通过管理网络访问Etcd服务。

设置Etcd服务自动启动并启动服务 为了让Etcd在系统启动时自动启动,并立即启动该服务,执行以下命令:

systemctl enable etcd systemctl start etcd

请注意,如果Etcd作为OpenStack环境的一部分使用,可能还需要进一步集成到OpenStack服务的相关配置中,确保各服务能够正常地利用Etcd的功能。在大规模多节点部署中,您可能还需要配置其他Etcd节点以构建集群。

A.3 安装和部署 Keystone身份管理服务 A.3.1 创建 Keystone 数据库

为了安装Keystone服务,首先需要在数据库服务器上创建一个专用的Keystone数据库,并赋予适当的访问权限。

使用数据库客户端以root用户身份登录到数据库服务器,并输入root用户的密码。mysql  -u root -p 创建名为keystone的数据库:

MariaDB [(none)]> CREATE DATABASE keystone;

授予keystone账户对本地及任意来源访问keystone数据库的全部权限,并设置密码为KEYSTONE_DBPASS:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';

退出数据库客户端。

A.3.2 安装和配置 Keystone 及相关组件

安装Keystone、Apache HTTP服务器以及mod_wsgi模块:

yum -y install openstack-keystone httpd mod_wsgi

配置Keystone服务的/etc/keystone/keystone.conf文件:设置数据库连接信息:

[database] connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone 在[token]节启用Fernet令牌提供者: [token] provider = fernet

初始化Keystone数据库结构:

su -s /bin/sh -c "keystone-manage db_sync" keystone

初始化Fernet密钥库和凭据库:

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

执行Keystone服务的基本初始化操作,设置管理员密码和API端点:

keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ --bootstrap-admin-url http://controller:5000/v3/ \ --bootstrap-internal-url http://controller:5000/v3/ \ --bootstrap-public-url http://controller:5000/v3/ \ --bootstrap-region-id RegionOne A.3.3 配置Apache HTTP服务器

修改/etc/httpd/conf/httpd.conf,设置ServerName指向控制节点IP或域名:

ServerName controller

为Apache配置Keystone的WSGI接口,创建符号链接或复制配置文件:

ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ A.3.4 完成 Keystone 安装

启动Apache HTTP服务并设置开机自动启动:

systemctl enable httpd.service systemctl start httpd.service

设置管理员账户相关的环境变量以便于后续操作: export OS_USERNAME=admin

export OS_PASSWORD=ADMIN_PASS export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3

验证Keystone安装: 使用curl命令访问Keystone API以确认服务是否可用。

[root@controller ~]# curl http:// controller:5000/v3 {"version": {"status": "stable", "updated": "2019-07- 19T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}], "id": "v3.13", "links": [{"href": "http:// 192.168.199.51:5000/v3/", "rel": "self"}]}}

使用openstack service list命令检查服务列表。

openstack service list

A.3.5 创建域、项目、用户和角色

在OpenStack环境中,Keystone服务负责提供认证和授权功能,而这依赖于正确配置的域、项目、用户和角色。

 创建域 在初始Keystone安装时,系统会自动创建一个默认域。通过运行openstack domain list命令可以查看已存在的域信息。默认域ID通常为"default",名称为"Default"。若有必要,可以根据组织架构或其他要求创建额外的域。

创建项目 使用openstack project list命令可以查看现有的项目。默认情况下,Keystone会创建一个名为“admin”的项目,供管理员使用。为了支持其他OpenStack服务通过Keystone进行集中统一认证,通常需要为每个服务创建一个服务项目。在这个案例中,综合实训云环境创建一个名为“service”的项目,用以包含所有服务对应的唯一用户。创建命令如下所示:

openstack project create --domain default --description "Service Project" service

创建用户 使用openstack user list命令列出已存在的用户。在实际操作中,除了管理员账户外,通常还需要创建用于日常操作和测试的非特权项目和用户。例如,在本实训场景中,创建一个名为“demo”的项目和相应的“demo”用户,用于演示和测试目的。创建“demo”项目:

openstack project create --domain default --description "Service Project" service

接着创建“demo”用户并设置密码为(DEMO_PASS)。在命令行中执行:

[root@controller ~]# openstack user create --domain default --password-prompt demo

这里会提示输入密码和再次确认密码。

创建角色 Keystone默认提供了三个预定义的角色:admin、member和reader。可以通过openstack role list命令查看现有角色列表。为了满足实训需求或者更细致的权限划分,可以创建自定义角色。这里创建一个名为“demo”的新角色:

openstack role create demo

管理员可以将不同角色分配给具体的项目、域或全局范围内的用户及用户组。在这个实训场景中,为了给“demo”项目中的“demo”用户赋予一定的权限,我们将“member”角色分配给该用户:

openstack role add --project demo --user demo member

通过以上步骤,完成了在Keystone中创建自定义域、项目、用户以及角色分配的基本流程,确保了OpenStack环境中的用户管理和权限控制得以实现。

A.3.6   验证 Keystone 服务的安装

在安装其他服务之前,在控制节点上验证 Keystone 身份管理服务的操作。

(1)如果当前已经设置了 admin  用户的环境变量, 则执行以下命令取消临时设置的 OS_AUTH_URL 和 OS_PASSWORD 环境变量。

unset OS_AUTH_URLOS_PASSWORD

执行命令以 admin 用户身份请求认证令牌,这里 admin 的密码是ADMIN_PASS。有回显即可。

[root@controller~]# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue A.3.7 创建 OpenStack 客户端环境脚本

在控制节点上,进入root用户的主目录,并分别创建两个环境脚本文件,一个是针对admin管理员用户,另一个是针对demo普通用户。

对于admin用户,创建文件/root/admin-openrc,并插入以下内容:

#!/bin/bash export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2

对于demo用户,创建文件/root/demo-openrc,并填入以下内容:

#!/bin/bash export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2

在需要以特定项目和用户身份执行OpenStack客户端命令时,只需提前执行对应的环境脚本文件,以加载所需的身份凭据。具体操作如下:

# 加载admin用户的环境变量 source /root/admin-openrc # 现在可以以admin用户身份执行OpenStack命令 openstack server list # 若要切换到demo用户执行命令,先清除当前环境变量,然后加载demo-openrc脚本 unset OS_* source /root/demo-openrc # 现在可以以demo用户身份执行OpenStack命令 openstack server list

这样,通过简单的脚本加载,您可以便捷且准确地在不同用户身份间切换,执行相应的OpenStack命令操作。

A.4.1 安装和部署Glance镜像服务

1.在控制节点上部署Glance镜像服务之前,需要先完成一些安装准备,主要包括创建数据库、服务凭据和API端点。

创建Glance数据库

(1)以root用户身份通过数据库访问客户端连接至数据库服务器:

mysql -u root -p

(2)在MySQL客户端中创建名为glance的数据库:

MariaDB [(none)]> CREATE DATABASE glance;

(3)为glance数据库用户赋予对glance数据库的全部权限,这里的glance账户密码设为GLANCE_DBPASS:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';

(4)最后,退出MySQL客户端:

MariaDB [(none)]> exit Bye

为了确保Glance镜像服务的正确安装和配置,以下是详细的步骤说明:

2. 获取管理员凭据 在继续进行服务凭据创建和API端点配置前,首先需要加载管理员的环境变量脚本,以便以管理员身份执行命令:

. admin-openrc

3. 创建Glance服务凭据 (1)创建名为glance的用户,并提示输入密码(此处设为GLANCE_PASS):

openstack user create --domain default --password-prompt glance

(2)将admin角色分配给glance用户和服务项目:

openstack role add --project service --user glance admin

(3)在服务目录中创建Glance服务实体:

openstack service create --name glance --description "OpenStack Image Service" image

4. 创建镜像服务的API端点

openstack endpoint create --region RegionOne image public http://controller:9292 openstack endpoint create --region RegionOne image internal http://controller:9292 openstack endpoint create --region RegionOne image admin http://controller:9292 A.4.2 安装和配置Glance组件

(1)安装Glance软件包:

yum -y install openstack-glance

(2)编辑/etc/glance/glance-api.conf配置文件:

设置数据库连接:

[database] connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

配置Keystone身份认证:

[keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = glance password = GLANCE_PASS [paste_deploy] flavor = keystone

配置镜像存储:

[glance_store] stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/

(3)初始化镜像服务数据库:

su -s /bin/sh -c "glance-manage db_sync" glance A.4.3 完成Glance服务安装

启用并启动Glance服务:

systemctl enable openstack-glance-api.service systemctl start openstack-glance-api.service A.4.4 验证Glance镜像操作

(1)下载CirrOS镜像源文件:

wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

(2)再次加载admin用户环境变量脚本:

. admin-openrc

(3)将镜像上传到Glance服务并设置为公共可见:

openstack image create "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public

(4)列出已上传的镜像以确认操作成功:

openstack image list A.5.1 完成Placement服务安装的前期准备

1.创建Placement数据库:

通过MySQL客户端以root用户身份登录数据库服务器:

mysql -u root -p

在数据库中创建名为“placement”的数据库:

MariaDB [(none)]> CREATE DATABASE placement;

授予placement用户对数据库的访问权限:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';

退出数据库访问客户端:

exit

2.创建用户和端点:

加载管理员环境变量脚本以获取管理员权限:

. admin-openrc

创建名为placement的用户,并提示输入密码(此处设为PLACEMENT_PASS):

openstack user create --domain default --password-prompt placement

将admin角色授予placement用户和服务项目:

openstack role add --project service --user placement admin

在服务目录中创建Placement服务实体:

openstack service create --name placement --description "Placement API" placement

创建Placement服务的API端点(根据实际情况替换端口及主机名):

openstack endpoint create --region RegionOne placement public http://controller:8778 openstack endpoint create --region RegionOne placement internal http://controller:8778 openstack endpoint create --region RegionOne placement admin http://controller:8778

请注意,在实际部署环境中,端口号可能不同于8778(例如可能是8780或其他指定的端口),并且主机名也需要与实际控制器节点的地址相符。务必检查您的部署环境文档以获取准确的端口和主机信息。接下来,您将继续安装和配置Placement服务的相关软件包和配置文件。

A.5.2 安装和配置Placement服务组件

安装软件包 在控制节点上安装Placement API服务的软件包:

yum -y install openstack-placement-api

编辑配置文件 编辑/etc/placement/placement.conf文件,完成以下配置:

在[placement_database]节中配置数据库连接:

[placement_database] connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement

在[api]和[keystone_authtoken]节中配置身份管理服务访问:

[api] auth_strategy = keystone [keystone_authtoken] auth_url = http://controller:5000/v3 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = placement password = PLACEMENT_PASS

初始化数据库 执行数据库同步以初始化placement数据库:

su -s /bin/sh -c "placement-manage db sync" placement A.5.3 完成放置服务安装并进行验证

重启HTTP服务 重启Apache HTTPD服务以应用配置更改:

systemctl restart httpd

执行状态检查 加载admin用户的环境变量以获取管理员权限,然后运行placement-status upgrade check命令验证服务配置是否正确:

[root@controller ~]# . admin-openrc [root@controller ~]# placement-status upgrade check +----------------------------------+ | Upgrade Check Results | +----------------------------------+ | Check: Missing Root Provider IDs | | Result: Success | | Details: None | +----------------------------------+ | Check: Incomplete Consumers | | Result: Success | | Details: None | A.6 安装和部署 Nova

    Nova  由多个组件和服务组成,可以部署在计算节点和控制节点这两类节点上。 Nova  部署必须初始化 Cell 架构。控制节点如果不同时作为计算节点,无须安装 nova-compute, 但要安装其他 Nova 组件和服务。计算服务支持多种虚拟机管理器来部署实例或虚拟机, 综合实训中在计算节点上使用带 KVM 扩展的 QEMU 来支持虚拟机的硬件加速。

A.6.1 在控制节点上完成Nova的安装准备

1. 创建数据库

登录数据库服务器并以root用户身份执行SQL命令:

mysql -u root -p

创建名为nova_api、nova和nova_cell0的三个数据库:

MariaDB [(none)]> CREATE DATABASE nova_api; MariaDB [(none)]> CREATE DATABASE nova; MariaDB [(none)]> CREATE DATABASE nova_cell0;

授予nova用户对这三个数据库的所有权限,密码设为NOVA_DBPASS:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';

退出数据库访问客户端:

exit

获取管理员凭据

加载admin用户的环境变量脚本,以便以管理员权限执行后续命令:

. admin-openrc

创建计算服务凭据

创建名为nova的用户,并设置其密码为NOVA_PASS:

openstack user create --domain default --password-prompt nova

将admin角色赋予nova用户和服务项目:

openstack role add --project service --user nova admin

创建Nova计算服务实体:

openstack service create --name nova --description "OpenStack Compute" compute

创建计算服务的API端点:

openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 A.6.2 在控制节点上安装和配置Nova组件

安装软件包 在控制节点上安装必要的Nova组件:

yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

编辑配置文件 /etc/nova/nova.conf

vim etc/nova/nova.conf

在 [DEFAULT] 节中只启用compute和metadata API:

[DEFAULT] enabled_apis=osapi_compute,metadata

在 [api_database] 和 [database] 节中配置数据库连接:

[api_database] connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api [database] connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova

在 [DEFAULT] 节中配置RabbitMQ消息队列访问:

[DEFAULT] transport_url=rabbit://openstack:RABBIT_PASS@controller:5672/

在 [api] 和 [keystone_authtoken] 节中配置身份管理服务访问:

[api] auth_strategy=keystone [keystone_authtoken] www_authenticate_uri=http://controller:5000/ auth_url=http://controller:5000/ memcached_servers=controller:11211 auth_type=password project_domain_name=Default user_domain_name=Default project_name=service username=nova password=NOVA_PASS

在 [DEFAULT] 节中配置控制节点的管理网络接口IP地址:

[DEFAULT] my_ip=10.0.0.11

启用对网络服务的支持,并配置计算服务的防火墙驱动:

[DEFAULT] use_neutron=true firewall_driver=nova.virt.firewall.NoopFirewallDriver

在 [vnc] 节中配置VNC代理监听地址:

[vnc] enabled=true server_listen=$my_ip server_proxyclient_address=$my_ip

在 [glance] 节中配置镜像服务API的位置:

[glance] api_servers=http://controller:9292

在 [oslo_concurrency] 节中配置锁定路径:

[oslo_concurrency] lock_path=/var/lib/nova/tmp

在 [placement] 节中配置Placement服务API:

[placement] region_name=RegionOne project_domain_name=Default project_name=service auth_type=password user_domain_name=Default auth_url=http://controller:5000/v3 username=placement password=PLACEMENT_PASS

初始化nova-api数据库

su -s /bin/sh -c "nova-manage api_db sync" nova

注册cell0数据库

su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

创建cell1单元

su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

初始化nova数据库

su -s /bin/sh -c "nova-manage db sync" nova

完成以上步骤后,控制节点上的Nova服务组件已基本安装和配置完毕,但仍需进一步配置网络服务相关的选项,并确保其他服务(如Neutron)已正确安装和配置,以实现各组件之间的协同工作。

A.6.3   在控制节点上完成 Nova 安装

执行以下命令将计算服务配置为开机自动启动,并启动计算服务。

systemctl    enable    openstack-nova-api.service    openstack-nova-scheduler.service openstack-nova-conductor.service    openstack-nova-novncproxy.service systemctl    start    openstack-nova-api.service    openstack-nova-scheduler.service openstack-nova-conductor.service    openstack-nova-novncproxy.service A.6.4 在计算节点上安装和配置Nova组件

安装软件

yum install openstack-nova-compute

编辑配置文件 /etc/nova/nova.conf

在 [DEFAULT] 节中启用compute和metadata API:

[DEFAULT] enabled_apis=osapi_compute,metadata

配置RabbitMQ消息队列访问:

[DEFAULT] transport_url=rabbit://openstack:RABBIT_PASS@controller

在 [api] 和 [keystone_authtoken] 节中配置身份认证服务访问:

[api] auth_strategy=keystone [keystone_authtoken] www_authenticate_uri=http://controller:5000/ auth_url=http://controller:5000/ memcached_servers=controller:11211 auth_type=password project_domain_name=Default user_domain_name=Default project_name=service username=nova password=NOVA_PASS

在 [DEFAULT] 节中配置计算节点的管理网络接口IP地址:

[DEFAULT] my_ip=10.0.0.21

启用对网络服务的支持并配置计算服务防火墙驱动:

[DEFAULT] use_neutron=true firewall_driver=nova.virt.firewall.NoopFirewallDriver

在 [vnc] 节中启用并配置远程控制台访问:

[vnc] enabled=true server_listen=0.0.0.0 server_proxyclient_address=$my_ip novncproxy_base_url=http://controller:6080/vnc_auto.html

在 [glance] 节中配置镜像服务API的位置:

[glance] api_servers=http://controller:9292

在 [oslo_concurrency] 节中配置锁定路径:

[oslo_concurrency] lock_path=/var/lib/nova/tmp

在 [placement] 节中配置Placement服务API:

[placement] region_name=RegionOne project_domain_name=Default project_name=service auth_type=password user_domain_name=Default auth_url=http://controller:5000/v3 username=placement password=PLACEMENT_PASS A.6.5 在计算节点上完成Nova安装

检查硬件加速支持情况:

[root@compute1 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo

如果结果大于等于1,说明支持硬件加速,无需额外配置;否则应配置libvirt使用QEMU而非KVM:

[libvirt] virt_type = qemu

启动计算服务及其依赖服务,并设置开机自动启动:

systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service

如果nova-compute服务启动失败,查看日志文件/var/log/nova/nova-compute.log排查问题。遇到类似“AMQP server on controller:5672 is unreachable likely”错误时,需要检查控制节点的防火墙设置,确保5672端口对计算节点开放。

A.6.6 将计算节点添加到cell数据库

当一个新的计算节点加入到OpenStack环境中时,需要在控制节点上通过命令行工具将其注册到cell数据库中。具体步骤如下:

首先,切换至控制节点并加载admin用户的环境变量脚本来获取管理员权限:

[root@controller ~]# . admin-openrc

查看当前已注册的计算节点主机:

[root@controller ~]# openstack compute service list --service nova-compute

这一步是为了确认计算节点已经被识别为服务的一部分,如示例所示,有一个计算节点主机compute1已经在服务列表中。

注册新发现的计算节点到cell数据库:

[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

此命令会自动检测未注册的计算节点,并将其添加到cell数据库中。

A.6.7 验证Nova计算服务的安装

在完成了计算节点的注册之后,可以通过以下步骤验证Nova计算服务是否成功安装和启动:

再次加载admin用户的环境变量脚本:

[root@controller ~]# . admin-openrc

列出所有计算服务组件的状态,以确认它们是否已成功启动并注册:

[root@controller ~]# openstack compute service list

示例输出显示了包括conductor、scheduler和compute在内的各个服务组件都在运行且状态为"up"。

查询hypervisor列表,确认计算节点compute1的虚拟机管理器类型是否正确显示为QEMU:

[root@controller ~]# openstack hypervisor list

如果输出表明compute1节点的Hypervisor类型是QEMU,并且状态为"up",则意味着Nova计算服务在计算节点上的安装和配置是成功的。

A.7 安装部署 Neutron

     这里部署的是自服务网络,Neutron 的的 L2 代理选择是 OVS(Open  vSwitch)代理, 由 OVS 交换机作为网络提供者。如果规模不大,无须部署专用的网络节点,只需在控制节 点和计算节点上部署所需的 Neutron 服务组件即可。这里控制节点兼作网络节点。控制节 点和计算节点都要安装 Neutron 的 OVS 代理组件。

A.7.1 控制节点上的网络服务安装准备

创建Neutron数据库

mysql -u root -p MariaDB [(none)]> CREATE DATABASE neutron; MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS'; exit

加载admin用户环境变量

. admin-openrc

创建Neutron服务凭据

openstack user create --domain default --password-prompt neutron openstack role add --project service --user neutron admin openstack service create --name neutron --description "OpenStack Networking" network

创建Neutron服务API端点

openstack endpoint create --region RegionOne network public http://controller:9696 openstack endpoint create --region RegionOne network internal http://controller:9696 openstack endpoint create --region RegionOne network admin http://controller:9696

A.7.2   在控制节点上配置网络选项

安装Neutron所需的网络组件: 使用yum命令一次性安装Neutron核心服务、ML2插件、Open vSwitch代理服务以及其他相关工具,如ebtables。

# yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch ebtables

检验Open vSwitch服务状态: 在CentOS 7系统中,Open vSwitch服务通常预装并已启动。运行以下命令以确认服务状态:

[root@controller ~]# systemctl status openvswitch

配置Neutron服务器组件(编辑/etc/neutron/neutron.conf文件):

数据库访问:在[database]节中配置Neutron连接数据库的信息,确保只保留有效的数据库连接配置。

[database] connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

启用ML2插件与相关服务:在[DEFAULT]节中启用ML2插件作为核心插件,并启用路由服务和IP地址重叠功能。

[DEFAULT] core_plugin = ml2 service_plugins = router allow_overlapping_ips = true

RabbitMQ消息队列访问:同样在[DEFAULT]节中设置RabbitMQ的消息队列访问地址。

[DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@controller

Keystone身份认证服务配置:在[DEFAULT]和[keystone_authtoken]节中配置Keystone身份验证服务访问参数。

[DEFAULT] auth_strategy = keystone [keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = neutron password = NEUTRON_PASS

与Nova计算服务的通知:在[DEFAULT]和[nova]节中设置网络拓扑变动时通知Nova服务的相关参数。

[DEFAULT] notify_nova_on_port_status_changes = true notify_nova_on_port_data_changes = true [nova] auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = nova password = NOVA_PASS

并发锁定路径:在[oslo_concurrency]节中设置锁定路径。

[oslo_concurrency] lock_path = /var/lib/neutron/tmp

配置ML2插件(编辑/etc/neutron/plugins/ml2/ml2_conf.文件):

启用网络类型:在[ml2]节中启用flat、VLAN和VXLAN网络类型。

[ml2] type_drivers = flat,vlan,vxlan

启用VXLAN自服务网络:设置VXLAN作为租户网络类型。

[ml2] tenant_network_types = vxlan

启用OVS代理与L2 Population:同样在[ml2]节中启用Open vSwitch代理和L2 Population机制。

[ml2] mechanism_drivers = openvswitch,l2population

启用端口安全扩展驱动:在[ml2]节中启用端口安全扩展驱动。

[ml2] extension_drivers = port_security

配置Flat网络:在[ml2_type_flat]节中,列出可用于创建Flat类型提供者网络的物理网络名称。默认使用通配符"*"允许任何物理网络名称。

[ml2_type_flat] flat_networks = *

配置VXLAN网络ID范围:在[ml2_type_vxlan]节中,为自服务网络配置VXLAN网络ID范围。

[ml2_type_vxlan] vni_ranges = 10:1000

安全组效率优化:在[securitygroup]节中启用ipset,以提高安全组规则执行效率。

[securitygroup] enable_ipset = true

 配置 OVS 代理

(1) 创建 OVS 提供者网桥

首先,我们需要创建一个OVS提供者网桥(外部网桥),并将提供者网络的网卡添加到该网桥的一个端口上。尽管可以通过命令(如ovs-vsctl add-br和ovs-vsctl add-port)实现,但这种方式在重启后会丢失配置。因此,我们建议使用网卡配置文件来实现。

步骤如下:

将OVS外部网桥命名为br-ex。 修改提供者网络的网卡(例如ens37)的配置文件/etc/sysconfig/network-scripts/ifcfg-ens37,内容如下:

NAME=ens37   DEVICE=ens37   TYPE=OVSPort   DEVICETYPE=ovs   OVS_BRIDGE=br-ex   ONBOOT=yes

创建一个新的网卡配置文件/etc/sysconfig/network-scripts/ifcfg-br-ex用于OVS外部网桥,内容如下:

NAME=br-ex   DEVICE=br-ex   DEVICETYPE=ovs   TYPE=OVSBridge   BOOTPROTO=static   IPADDR=192.168.199.51   PREFIX=24   GATEWAY=192.168.199.1   DNS1=114.114.114.114   ONBOOT=yes

重启network服务使上述修改生效,并验证网桥的设置。 (2) 配置 OVS 代理

接下来,我们需要配置OVS代理。这主要通过编辑/etc/neutron/plugins/ml2/openvswitch_agent.ini文件来实现。关键配置如下:

[ovs]   bridge_mappings = extnet:br-ex   local_ip = 10.0.0.11      [agent]   tunnel_types = vxlan   l2_population = True      [securitygroup]   firewall_driver = iptables_hybrid

其中,bridge_mappings定义物理网络到OVS网桥的映射;local_ip定义本地覆盖网络端点的IP地址;tunnel_types指定隧道类型;firewall_driver用于安全组防火墙。

6. 配置 L3 代理

L3代理为虚拟网络提供路由和NAT服务。编辑/etc/neutron/l3_agent.ini文件,在[DEFAULT]节中配置OVS接口驱动:

[DEFAULT]   # ...   interface_driver = openvswitch

 配置 DHCP 代理

DHCP代理为虚拟网络提供DHCP服务。编辑/etc/neutron/dhcp_agent.ini文件,在[DEFAULT]节中配置OVS接口驱动,并启用元数据隔离:

[DEFAULT]   interface_driver = openvswitch   enable_isolated_metadata = True   force_metadata = True A.7.3 在控制节点上配置元数据代理

元数据代理允许虚拟机通过网络访问元数据服务。具体配置步骤和参数可能会根据具体的OpenStack版本和部署方式有所不同,但通常涉及编辑相关的配置文件和启动元数据代理服务。

元 数 据 代 理 为 实 例 提 供 像 安 全 凭 据 这 样 的 配 置 信 息 。 编 辑 /etc/neutron/metadata_agent.ini 文件, 在[DEFAULT]节中配置元数据主机和共享密码(可根 据需要替换 METADATA_SECRET 密码)。

[DEFAULT] # ... nova_metadata_host = controller metadata_proxy_shared_secret = METADATA_SECRET

A.7.4   在控制节点上配置计算服务使用网络服务

编辑/etc/nova/nova.conf 文件,在[neutron]节中设置访问参数, 启用元数据代理,并配 置密码。

[neutron] # ... auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS service_metadata_proxy = true metadata_proxy_shared_secret = METADATA_SECRET A.7.5   在控制节点上完成网络服务安装

( 1  ) 网 络 服 务 初 始 化 脚 本 需 要 一 个 指 向 ML2     插 件 配 置 文 件 /etc/neutron/plugins/ml2/ml2_conf.ini 的符号连接/etc/neutron/plugin.ini。如果该符号连接未创 建,执行以下命令创建。

ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

(2)初始化数据库。

su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

(3)重启计算 API 服务。

systectl restart openstack-nova-api.service

(4)启动网络服务并将其配置为开机自动启动。

systemctl enable neutron-server.service \ neutron-openvswitch-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service neutron-l3-agent.service systemctl start neutron-server.service \ neutron-openvswitch-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service neutron-l3-agent.service A.7.6   在计算节点上安装 Neutron 组件

计算节点负责实例的连接和安全组, 需要安装 Neutron 的 OVS 代理组件。执行以下命 令安装所需的软件包。

yum -y install openstack-neutron-openvswitch ebtables ipset A.7.7   在计算节点上配置网络通用组件

网络通用组件配置包括认证机制、消息队列和插件。编辑/etc/neutron/neutron.conf 配置 文件, 设置以下选项。 (1)在[database]节中将连接设置语句注释掉, 因为计算节点不访问 neutron 数据库。 (2)在[DEFAULT]节中配置 RabbitMQ 消息队列访问。 (3 ) 在 [DEFAULT] 和 [keystone_authtoken] 节 中 配 置 身 份 管 理 服 务 访 问 。 将 [keystone_authtoken]节中的其他选项注释掉或直接删除。

[DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = neutron password = NEUTRON_PASS

(4)在[oslo_concurrency]节中配置锁定路径。

[oslo_concurrency] # ... lock_path = /var/lib/neutron/tmp A.7.8   在计算节点上配置网络选项

选择与控制节点相同的网络选项,即自服务网络。这里计算节点仅安装有 OVS 代理, 通过编辑/etc/neutron/plugins/ml2/openvswitch_agent.ini 文件进行配置, 具体配置如下。

[ovs] local_ip = 10.0.0.21 [agent] tunnel_types = vxlan l2_population = True [securitygroup] firewall_driver = iptables_hybrid 这里 local_ip 选项设置为计算节点管理网络接口 IP 地址。在[vxlan]节中启用 VXLAN 覆盖网络和 L2 population。在[securitygroup]节中配置安全组混合 iptables 防火墙驱动。 A.7.9   在计算节点上配置计算服务使用网络服务 编辑/etc/nova/nova.conf file 文件,在[neutron]节中设置访问选项。 [neutron] # ... auth_url = http://controller:5000 auth_type = password project_domain_name = Default user_domain_name = Default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS

其中 password 选项设置身份管理服务中的 neutron 用户的密码。

A.7.10   在计算节点上完成网络服务安装

执行以下命令重启计算服务。

systemctl restart openstack-nova-compute.service

执行以下命令启动 OVS 代理服务并将其配置为开机自动启动。

systemctl enable neutron-openvswitch-agent.service systemctl start neutron-openvswitch-agent.service A.7.11   验证网络服务运行

在控制节点上加载 admin 用户的环境脚本。

source admin-openrc

查看网络代理列表

openstack network agent list A.7.12 创建初始网络

为了简化实验,我们将创建一个Flat类型的提供者网络、一个自服务网络和一个路由器,路由器将使用NAT转发IPv4网络流量。以下是在控制节点上执行的具体操作:

(1) 加载admin用户的环境脚本

source admin-openrc

(2) 创建一个名为public1的提供者网络

openstack network create --project admin --share --external \     --availability-zone-hint nova --provider-physical-network extnet \     --provider-network-type flat public1

(3) 在提供者网络上创建一个名为public1_subnet的IPv4子网

openstack subnet create --network public1 \     --allocation-pool start=192.168.199.61,end=192.168.199.90 \     --dns-nameserver 114.114.114.114 --gateway 192.168.199.1 \     --subnet-range 192.168.199.0/24 public1_subnet

(4) 加载普通用户demo的环境脚本

source demo-openrc

(5) 创建一个名为private1的自服务网络

openstack network create private1

(6) 基于自服务网络创建名为private1_subnet的IPv4子网

openstack subnet create --subnet-range 172.16.1.0/24 \     --network private1 --dns-nameserver 114.114.114.114 private1_subnet

注意:这里有个小错误,--network private 1 应更正为 --network private1。

(7) 创建一个名为router1的路由器

openstack router create router1

(8) 将private1_subnet子网添加到路由器的接口

openstack router add subnet router1 private1_subnet

(9) 设置路由器的外部网关为提供者网络public1

openstack router set --external-gateway public1 router1

A.7.13 验证网络操作

(1) 验证qrouter名称空间的创建

[root@controller ~]# ip netns   qrouter-xxxxxxxxxxxx (id: 1)   qdhcp-xxxxxxxxxxxx (id: 0)

你应该能看到类似上面的输出,其中qrouter-和qdhcp-后面的xxxxxxxxxxxx是UUID。

(2) 加载admin的环境脚本并创建实例类型

[root@controller ~]# source admin-openrc   [root@controller ~]# openstack flavor create --id 1 --ram 512 --disk 1 --vcpus 1 --rxtx-factor 1 public m1.tiny

注意:这里加载的是admin-openrc,而不是demo-openrc。

(3) 加载普通用户demo的环境脚本

source demo-openrc

(4) 创建安全组规则

[root@controller ~]# openstack security group rule create --proto icmp default   [root@controller ~]# openstack security group rule create --proto tcp --dst-port 22 default

(5) 基于自服务网络创建虚拟机实例

[root@controller ~]# openstack server create --flavor m1.tiny --image cirros --nic net-id= --security-group default my-instance

在上面的命令中,你需要将替换为private1网络的实际ID。同样,my-instance是你给虚拟机实例取的名字。 6)执行openstack server list 命令查看实例列表,可以发现该实例的IP 地址来自private1 自服务网络。 (7)为虚拟机实例分配浮动 IP 地址以解决外部网络访问问题。 在提供者网络中创建一个浮动 IP 地址。

[root@controller ~]# openstack floating ip create public1 +-------------------+--------------------+ | Field                                        | Value                                      | +-------------------+--------------------+ | created_at    | 2020- 10- 17T12:12:07Z     | | description    |                             | | dns_domain                          | None     | dns_name                             | None | | fixed_ip_address                | None       | | floating_ip_address          | 192.168.199.63  

这里创建的浮动 IP 地址为 192.168.199.63。 为该实例分配该 IP 地址。 [root@controller ~]# openstack server add floating ip testVM1 192.168.199.63 在控制节点上 ping 该实例的浮动 IP,测试到该实例的通信,结果正常。

[root@controller ~]# ping -c 2 192.168.199.63 PING 192.168.199.63 ( 192.168.199.63) 56(84) bytes of data. 64 bytes from 192.168.199.63: icmp_seq=1 ttl=63 time=2.56 ms 64 bytes from 192.168.199.63: icmp_seq=2 ttl=63 time=1.32 ms

(8)根据需要登录到该实例,测试到 Internet 或外部网络的通信。

A.8   安装和部署 Horizon

在控制节点上安装 Horizon。确认使用 Apache  HTTP  服务器和 Memcached  服务的 Keystone 身份管理服务已经安装和配置好,并在正常运行。

A.8.1   安装和配置 Horizon 组件

1 .安装软件包

yum -y install openstack-dashboard

2 .编辑/etc/openstack-dashboard/local_settings 配置文件 (1)配置仪表板使用控制节点上的 OpenStack 服务。

OPENSTACK_HOST = "controller"

(2)设置允许访问 Dashboard 的主机。

ALLOWED_HOSTS = ['*']

这里使用通配符“*”来代表所有的主机。 (3)配置 Memcached 会话存储服务。注意将除以下选项的其他会话存储配置选项全部 注释掉。

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', } }

(4)启用 Identity API v3 支持,此为默认设置。  

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

(5)启用对多个域的支持。

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

(6)配置 API 版本。

OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 2, }

(7)配置通过仪表板创建的用户的默认域。

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

(8)配置过仪表板创建的用户的默认角色。

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "reader"

(9)根据需要配置时区, 这里将时区改为上海。

TIME_ZONE = "Asia/Shanghai"

(10)添加以下设置。 # WEBROOT 定义访问仪表板访问路径(相对于 Web 服务器根目录),注意路径末尾 要加斜杠

WEBROOT = '/dashboard/'

#  以下两个选项分别定义登录和退出登录(注销) 的路径

LOGIN_URL = '/dashboard/auth/login/' LOGOUT_URL = '/dashboard/auth/logout/' # LOGIN_REDIRECT_URL 选项定义登录重定向路径 LOGIN_REDIRECT_URL = '/dashboard/'

3 .调整其他配置 如果/etc/httpd/conf.d/openstack-dashboard.conf 文件中没有包含以下定义,将该定义语 句添加到该文件中。

WSGIApplicationGroup %{GLOBAL} A.8.2   完成 Horizon 安装并进行验证

重启 Web 服务和会话存储服务。

systemctl restart httpd.service memcached.service

在控制节点上通过浏览器访问 http://controller/dashboard  网址, 出现正常的登录界面, 输入 admin 账户和密码, 如图  所示。

 

A.9   安装和部署 Cinder

   块存储 API(cinder-api)和调度服务(cinder-scheduler)通常部署在控制节点上。根 据所用的存储驱动,卷服务(cinder-volume)可以部署在控制节点、计算节点或者专门的 存储节点上。综合实训的双节点系统中由计算节点兼作存储节点, 为实例提供卷服务。

A.9.1   在控制节点上完成 Cinder 的安装准备

安装和配置块存储服务之前,必须创建数据库、服务凭据和 API 端点。

(1)创建 Cinder 数据库 使用数据库访问客户端, 以 root 用户身份连接到数据库服务器。

mysql -u root -p

依次执行以下命令创建数据库并设置访问权限,完成之后退出数据库访问客户端。这 里 cinder 用户的密码设为 CINDER_DBPASS。

MariaDB [(none)]> CREATE DATABASE cinder; MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ IDENTIFIED BY 'CINDER_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ IDENTIFIED BY 'CINDER_DBPASS'; MariaDB [(none)]> exit;

(2)加载 admin 的环境脚本。后续命令行操作需要云管理员身份。

. admin-openrc

(3)创建 cinder 服务凭据。依次执行以下命令创建 cinder 用户,将 admin 角色授予该 用户, 并创建 cinderv2 和 cinderv3 的服务实体。

openstack user create --domain default --password-prompt cinder openstack role add --project service --user cinder admin openstack  service  create  --name  cinderv2    --description  "OpenStack  Block  Storage" volumev2     openstack  service  create  --name  cinderv3    --description  "OpenStack  Block  Storage" volumev3

(4)创建块存储服务的 API 端点(应为每个服务实体创建端点)。  

openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s openstack endpoint create --region RegionOne \ volumev2 internal http://controller:8776/v2/%\(project_id\)s openstack endpoint create --region RegionOne \ volumev2 admin http://controller:8776/v2/%\(project_id\)s openstack endpoint create --region RegionOne \ volumev3 public http://controller:8776/v3/%\(project_id\)s openstack endpoint create --region RegionOne \ volumev3 internal http://controller:8776/v3/%\(project_id\)s openstack endpoint create --region RegionOne \ volumev3 admin http://controller:8776/v3/%\(project_id\)s A.9.2   在控制节点上安装和配置 Cinder 组件

1 .安装软件包

yum -y install openstack-cinder

2 .编辑/etc/cinder/cinder.conf 文件以完成相关设置 (1)在[database]节中配置数据库访问。

[database] # ... connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

(2)在[DEFAULT]节中配置 RabbitMQ 消息队列访问。

[DEFAULT] # ... transport_url = rabbit://openstack:RABBIT_PASS@controller

(3 )在 [DEFAULT] 和 [keystone_authtoken] 节 中配置 身份 管理服务访 问 。注 意将 [keystone_authtoken]节中的其他选项注释掉或直接删除。

[DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS

(4)在[DEFAULT]节中配置 my_ip 选项(其值为控制节点上管理网络接口的 IP 地址)。

[DEFAULT] # ... my_ip = 10.0.0.11

(5)在[oslo_concurrency]节中配置锁定路径。

[oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp

3 .初始化块存储数据库

su -s /bin/sh -c "cinder-manage db sync" cinder A.9.3   在控制节点上配置计算服务使用块存储服务

编辑/etc/nova/nova.conf 配置文件,在[cinder]节中添加以下设置:

[cinder] os_region_name = RegionOne A.9.4   在控制节点上完成 Cinder 安装

(1)重启计算 API 服务

systemctl restart openstack-nova-api.service

(2)启动块存储服务并将其配置为开机自动启动

systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service A.9.5   在存储节点上完成 Cinder 的安装准备

安装和配置块存储服务之前,必须准备好存储设备。 (1)在存储节点主机上增加一块硬盘 为便于实验,本例通过为 CentOS 7 虚拟机增加一块硬盘。可查看当前的磁盘设备列表。

[root@compute1 ~]# fdisk -l Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors …… Device Boot    Start    End    Blocks      Id    System /dev/sda1      *    2048    2099199    1048576      83    Linux /dev/sda2    2099200    419430399    208665600      8e    Linux LVM

(2)安装支持工具包 CentOS 7 操作系统默认已安装 LVM 包。如果没有安装,执行以下命令安装 LVM 包, 启动 LVM 元数据服务并将其配置为开机自动启动。

yum -y install lvm2 device-mapper-persistent-data systemctl enable lvm2-lvmetad.service systemctl start lvm2-lvmetad.service

(3)创建 LVM 物理卷/dev/sdb

[root@compute1 ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created.

(4)基于该物理卷创建 LVM 卷组 cinder-volumes

[root@compute1 ~]# vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created vgcreate cinder-volumes /dev/sdb

Cinder 块存储服务在这个卷组中创建逻辑卷。 (5)编辑/etc/lvm/lvm.conf 文件 在“devices”节中添加一个过滤器来接受/dev/sdb 设备并拒绝所有其他设备。

devices { ... filter = [ "a/sda/", "a/sdb/", "r/.*/"]

只有实例能够访问块存储卷。但是, 底层的操作系统管理与卷关联的设备。默认情况 下,LVM 卷扫描工具扫描/dev  目录以获取那些包括卷的块存储设备。如果项目在其卷上使 用 LVM,扫描工具探测这些卷并试图缓存它们,这会导致底层操作系统和项目卷的多种问 题。因此, 必须重新配置 LVM 使得仅扫描包括卷组的设备。 过滤器中的每项以 a 表示接受, 以 r 开头表示拒绝,设备名使用正则表达式。数组必 须以 r/.*/结尾表示拒绝任何其余的设备。本例中/dev/sda 设备包含操作系统,必须将该设备 也加入到过滤器中。

A.9.6   在存储节点上安装和配置 Cinder 组件

首先安装软件包。

yum -y install openstack-cinder targetcli python-keystone

然后编辑/etc/cinder/cinder.conf 文件并完成相应设置 (1)在[database]节中配置数据库访问。  

[database] # ... connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

(2)在[DEFAULT]节中配置 RabbitMQ 消息队列访问。

[DEFAULT] # ... transport_url = rabbit://openstack:RABBIT_PASS@controller

(3 )在 [DEFAULT] 和 [keystone_authtoken] 节 中配置 身份 管理服务访 问 。注 意将 [keystone_authtoken]节中的其他选项注释掉或直接删除。

[DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS

(4)在[DEFAULT]节中配置 my_ip 选项(其值为存储节点上管理网络接口的 IP 地址)。

[DEFAULT] # ... my_ip = 10.0.0.21

(5)在[lvm]节中配置 LVM 后端,包括 LVM 驱动、 cinder-volumes 卷组、 iSCSI 协议 和适当的 iSCSI 服务。如果[lvm]节不存在,需要添加该节。

[lvm] volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes target_protocol = iscsi target_helper = lioadm

(6)在[DEFAULT]节中启用 LVM 后端。

[DEFAULT] # ... enabled_backends = lvm

后端可随意命名,此例中使用驱动名称作为后端的名称。 (7)在[DEFAULT]节中配置镜像服务 API 的位置。

[DEFAULT] # ... glance_api_servers = http://controller:9292

(8)在[oslo_concurrency]节中配置锁定路径。

[oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp A.9.7   在存储节点上完成 Cinder 安装

(1). 启动块存储卷服务及其依赖组件,并配置它们开机自动启动。

systemctl enable openstack-cinder-volume.service target.service systemctl start openstack-cinder-volume.service target.service A.9.8   验证 Cinder 服务操作

(1)检查 Cinder 服务运行情况 在控制节点上加载 admin 凭据, 以获取管理员权限。

. admin-openrc

执行以下命令列出 Cinder 块存储服务组件。

[root@controller ~]# openstack volume service list +--------------+------------+-----+-------+-----+------------------------+ | Binary                         | Host                       | Zone | Status       | State     |    Updated At                                   | +--------------+------------+-----+-------+-----+------------------------+ | cinder-scheduler    | controller             | nova    | enabled | up         | 2020- 10- 18T02:49:09.000000 | | cinder-volume        | compute1@lvm | nova     | enabled | up        | 2020- 10- 18T02:49:08.000000 |

结果表明 Cinder 块存储服务正常运行,控制节点上运行 cinder-scheduler 子服务, 存储 节点(这里由计算节点主机兼任)上运行 cinder-volume 子服务。 (2)创建卷进行要测试 在控制节点上创建一个卷,并指定可用域、卷大小。 [root@controller ~]# openstack volume create    --size 5 --availability-zone nova testVol 创建完毕, 查看卷列表, 可发现该卷已成功创建。

[root@controller ~]# openstack volume list +-----------------------------------+-------+-------+----+-------------+ | ID                                                                                    | Name      | Status    | Size     | Attached to          | +-----------------------------------+-------+-------+----+-------------+ | e1c25033-c3d4-49e2-8e7d-bc19ab4e768b | testVol    | available |         5 |      

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3